package edu.fasta.sisinfo2.gui;

import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JLabel;
import javax.swing.JButton;
import javax.swing.JTextField;

import edu.fasta.sisinfo2.poker.Carta;
import edu.fasta.sisinfo2.poker.JugadorImplementacion;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

import java.util.Iterator;
import java.util.List;


import javax.swing.AbstractAction;
import javax.swing.Action;



public class PokerTexasMainFrame extends JFrame {

	private JPanel contentPane;
	private JTextField textField;
	private JTextField textField_1;
	private JTextField textField_2;


	/**
	 * Launch the application.
	 */
	public void inicioGUI(final PokerTexasMainFrame frame){
		
		
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
						
					frame.setVisible(true);
					
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public PokerTexasMainFrame(TexasPokerGUI Poker, JugadorImplementacion Jugador) {
		
		TexasPokerGUI unPoker= Poker;
		JugadorImplementacion unJugador= Jugador;
		
		setTitle("Poker Texas - UFASTA - Jugador: " + unJugador.getNombre() );
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 1024, 600);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);
		
		//inicio juego
		
	
		
		JPanel panel = new JPanel();
		panel.setBounds(10, 230, 444, 176);
		contentPane.add(panel);
		panel.setLayout(null);
		
		JScrollPane scrollPane_1 = new JScrollPane();
		scrollPane_1.setBounds(0, 0, 444, 179);
		panel.add(scrollPane_1);
		
		JTextArea txtrEnEsteLugar = new JTextArea();
		scrollPane_1.setViewportView(txtrEnEsteLugar);
		// funciones que imprimen las cartas de la mesa
	
		List listaDeCartasEnMesa = unPoker.getLaMesa().getCartasSobreLaMesa();
		
		Iterator it = listaDeCartasEnMesa.iterator();
		String cartasMesaString = new String();
		while(it.hasNext()){
			cartasMesaString = cartasMesaString.concat(((Carta)it.next()).imprimirla()+"\n");
			
		}

		txtrEnEsteLugar.setText(cartasMesaString);
		//txtrEnEsteLugar.append(unPoker.getLaMesa().getSalidaTurn());
		//txtrEnEsteLugar.append(unPoker.getLaMesa().getSalidaRiver());
		
		
		
		
		JLabel lblEstadoDelJuego = new JLabel("Estado del Juego");
		lblEstadoDelJuego.setBounds(10, 0, 116, 21);
		contentPane.add(lblEstadoDelJuego);
		
		JScrollPane scrollPane = new JScrollPane();
		scrollPane.setBounds(10, 19, 988, 169);
		contentPane.add(scrollPane);
		
		JTextArea txtrEsteEsUn = new JTextArea();
		// funciones que imprimen los movimientos del juego
		txtrEsteEsUn.setText("Bienvenido Jugador: "+ unJugador.getNombre() +"\n"+
				"Gracias por elegir el Poker Texas UFASTA\n para empezar puede elegir un de las siguientes opciones:\n" +
				"    - Iniciar un servidor cliqueando en el boton Iniciar Servidor\n" +
				"    - Conectarse a un servidor ingresando los datos de direccion IP y puerto ej 192.168.1.1:40000 y apretando Conectar\n ");
		/*
		 * TODO aca se deberian colocar las funciones de actualizar pantalla
		 * leer socket y escribir cambios
		 */
		scrollPane.setViewportView(txtrEsteEsUn);
		
		JLabel lblCartasDeLa = new JLabel("Cartas de la Mesa:");
		lblCartasDeLa.setBounds(10, 212, 129, 14);
		contentPane.add(lblCartasDeLa);
		
		JLabel lblCartasDelJugador = new JLabel("Cartas del Jugador:");
		lblCartasDelJugador.setBounds(483, 212, 129, 14);
		contentPane.add(lblCartasDelJugador);
		
		JLabel lblOpcionesDeJugador = new JLabel("Opciones de Jugador:");
		lblOpcionesDeJugador.setBounds(483, 369, 140, 21);
		contentPane.add(lblOpcionesDeJugador);
		
		JButton btnVer = new JButton("Check");
		btnVer.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
			//TODO funcion para enviar por socket unJugador.check();
			}
		});
		btnVer.setBounds(483, 401, 129, 23);
		contentPane.add(btnVer);
		
		JButton btnIgualarApuesta = new JButton("Igualar");
		btnIgualarApuesta.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				//TODO funcion para enviar por socket unJugador.igualar();
			}
		});
		btnIgualarApuesta.setBounds(637, 401, 129, 23);
		contentPane.add(btnIgualarApuesta);
		
		JButton btnDoblarApuesta = new JButton("All In");
		btnDoblarApuesta.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				
				//TODO funcion para enviar por socket unJugador.allin();
			}
		});
		btnDoblarApuesta.setBounds(796, 401, 129, 23);
		contentPane.add(btnDoblarApuesta);
		
		JButton btnIrse = new JButton("Fold");
		btnIrse.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				
				//TODO funcion para enviar por socket unJugador.fold();
			}
		});
		
		btnIrse.setBounds(796, 433, 129, 23);
		contentPane.add(btnIrse);
		
		JPanel panel_1 = new JPanel();
		panel_1.setBounds(483, 230, 442, 140);
		contentPane.add(panel_1);
		panel_1.setLayout(null);
		
		JScrollPane scrollPane_2 = new JScrollPane();
		scrollPane_2.setBounds(0, 0, 442, 139);
		panel_1.add(scrollPane_2);
		
		JTextArea txtrTusCartasSon = new JTextArea();
		scrollPane_2.setViewportView(txtrTusCartasSon);
		//funciones que imprimen las cartas propias del jugador
		//txtrTusCartasSon.setText("Tus Cartas son: ");
		txtrTusCartasSon.append(unJugador.getMano().getCartasJugadorStr());
		
		JLabel lblSubirApuestaA = new JLabel("Subir Apuesta a   $ :");
		lblSubirApuestaA.setBounds(471, 470, 116, 21);
		contentPane.add(lblSubirApuestaA);
		
		textField = new JTextField();
		textField.setBounds(595, 470, 86, 20);
		contentPane.add(textField);
		textField.setColumns(10);
		
		JButton btnSubir = new JButton("Apostar");
		btnSubir.setBounds(691, 469, 89, 23);
		contentPane.add(btnSubir);
		
		JLabel lblSaldoDisponible = new JLabel("Saldo Disponible:");
		lblSaldoDisponible.setBounds(483, 508, 97, 21);
		contentPane.add(lblSaldoDisponible);
		
		textField_1 = new JTextField();
		textField_1.setText("$ 0,00");
		textField_1.setBounds(595, 508, 86, 20);
		contentPane.add(textField_1);
		textField_1.setColumns(10);
		
		JButton btnJugar = new JButton("Jugar");
		btnJugar.setBounds(10, 419, 140, 23);
		contentPane.add(btnJugar);
		
		JButton btnConectarAServidor = new JButton("Conectar");
		btnConectarAServidor.setBounds(325, 469, 97, 23);
		contentPane.add(btnConectarAServidor);
		
		textField_2 = new JTextField();
		textField_2.setBounds(175, 472, 140, 20);
		contentPane.add(textField_2);
		textField_2.setColumns(10);
		
		JLabel lblDireccionIp = new JLabel("Direccion IP : puerto");
		lblDireccionIp.setBounds(21, 469, 144, 26);
		contentPane.add(lblDireccionIp);
		
		JLabel lblServidor = new JLabel("Servidor");
		lblServidor.setBounds(10, 453, 74, 14);
		contentPane.add(lblServidor);
		
		JButton btnNewButton = new JButton("Iniciar Servidor");
		btnNewButton.setBounds(10, 528, 184, 23);
		contentPane.add(btnNewButton);
	}
	private class SwingAction extends AbstractAction {
		public SwingAction() {
			putValue(NAME, "SwingAction");
			putValue(SHORT_DESCRIPTION, "Some short description");
		}
		public void actionPerformed(ActionEvent e) {
		}
	}
}
